﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PMS
{
    class DBOperate
    {
        SqlConnection conn = new SqlConnection();

        //数据库执行SQL语句
        public int OperateData(string strSql)
        {
            conn.Open();                                    //打开数据库连接
            SqlCommand cmd = new SqlCommand(strSql, conn);  //创建命令对象
            int i = (int)cmd.ExecuteNonQuery();             //执行SQL命令
            conn.Close();                                   //关闭数据库连接
            return i;                                       //返回数值
        }

        //绑定数据库数据到DataGridView控件
        public void BindDataGridView(DataGridView dgv, string sql)
        {
            SqlDataAdapter sda = new SqlDataAdapter(sql, conn); //创建数据适配器对象
            DataSet ds = new DataSet();                         //创建数据集对象
            sda.Fill(ds);                                       //填充数据集
            dgv.DataSource = ds.Tables[0];                      //绑定到数据表
            ds.Dispose();                                       //释放资源
        }

        //查找指定数据库表的返回数
        public int HumanNum(string strsql)
        {
            conn.Open();                                        //打开数据库连接
            SqlCommand cmd = new SqlCommand(strsql, conn);      //创建命名对象
            int i = (int)cmd.ExecuteScalar();                   //执行SQL命令
            conn.Close();                                       //关闭数据库连接
            return i;                                           //返回数值
        }

        //在PictureBox控件中显示选择的图片
        public void Read_Image(OpenFileDialog openF, PictureBox MyImage)
        {
            openF.Filter = "*.jpg|*.jpg|*.bmp|*.bmp";       //筛选打开文件的格式
            if(openF.ShowDialog() == DialogResult.OK)       //如果打开了图片文件
            {
                try
                {
                    //设置控件的Image属性
                    MyImage.Image = System.Drawing.Image.
                        FromFile(openF.FileName);
                }
                catch
                {
                    //弹出信息对话框
                    MessageBox.Show("你选择的图片不能被独缺或文件类型不对！",
                    "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        }

        //图片以二进制存入数据库
        public void SaveImage(string MID,OpenFileDialog openF)
        {
            string P_str = openF.FileName;                      //得到图片所在的路径
            //创建文件流对象
            FileStream fs = new FileStream(P_str, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);             //创建二进制读取器
            byte[] imgBytesIn = br.ReadBytes((int)fs.Length);   //将流读入到字节数组中
            conn.Open();                                        //打开数据库连接
            StringBuilder strSql = new StringBuilder();         //创建字符串构造器
            strSql.Append(
                "update tb_employee Set employeePhoto=@Photo where employeeID=" + MID);
            SqlCommand cmd = new SqlCommand(strSql.ToString(), conn);           //创建命令对象
            cmd.Parameters.Add("@Photo", SqlDbType.Binary).Value = imgBytesIn;  //添加参数
            cmd.ExecuteNonQuery();                                              //执行SQL命令
            conn.Close();                                                       //关闭数据库连接
        }

        //将图片从数据库中取出
        public void Get_Image(string ygname,PictureBox pb)
        {
            byte[] imagebytes = null;                       //声明字节数组变量
            conn.Open();                                    //打开数据库连接
            SqlCommand com = new SqlCommand(
                //创建命令对象
                "select * from tb_employee where employeeID='" + ygname + "'", conn);
            SqlDataReader dr = com.ExecuteReader();         //执行SQL命令
            while(dr.Read())                                //读取数据库中的数据
            {   
                imagebytes = (byte[])dr.GetValue(11);       //得到图像的字节数据
            }
            dr.Close();                                     //关闭数据读取器
            conn.Close();                                   //关闭数据库连接
            MemoryStream ms = new MemoryStream(imagebytes); //创建内存流对象
            Bitmap bmpt = new Bitmap(ms);                   //得到BMP对象
            pb.Image = bmpt;                                //显示图像信息
        }

        //查询SQL语句返回相应的DataSet对象
        public DataSet GetTable(string sql)
        {
            SqlDataAdapter sda = new SqlDataAdapter(sql, conn);     //创建数据适配器对象
            DataSet ds = new DataSet();                             //创建数据集
            sda.Fill(ds);                                           //填充数据集
            ds.Dispose();                                           //释放资源
            return ds;                                              //返回数据集
        }

        //用于对指定的ComboBox控件进行数据绑定
        public void BindDropdownlist(string strTable, ComboBox cb, int i)
        {
            conn.Open();                                            //打开数据库连接
            SqlCommand cmd = new SqlCommand(
                "select * from" + strTable, conn);                  //创建命令对象
            SqlDataReader sdr = cmd.ExecuteReader();                //得到数据读取器
            while(sdr.Read())
            {
                cb.Items.Add(sdr[i].ToString());                    //添加信息
            }
            conn.Close();                                           //关闭数据库连接
        }

        //用于计算不同工资应该缴纳的个人所得税
        public decimal GYSD(int pay)
        {
            decimal tax = 0;                                //个人所得税
            int Y = pay - 1600;                             //计税工资=每月工资-1600
            if(pay<=1600)
            {
                tax = 0;                                    //没有个人所得税
            }
            else
            {
                if(Y>=0||Y<=500)
                {
                    tax = (decimal)(Y * 0.05);              //计算个人所得税
                }
                else
                {
                    if(Y>500||Y<=2000)
                    {
                        tax = (decimal)(Y * 0.1 - 25);
                    }
                    else
                    {
                        if(Y>2000||Y<=5000)
                        {
                            tax = (decimal)(Y * 0.15 - 125);
                        }
                        else
                        {
                            if(Y>5000||Y<=20000)
                            {
                                tax = (decimal)(Y * 0.2 - 375);
                            }
                            else
                            {
                                if(Y>20000||Y<=40000)
                                {
                                    tax = (decimal)(Y * 0.25 - 1375);
                                }
                                else
                                {
                                    if(Y>40000||Y<=60000)
                                    {
                                        tax = (decimal)(Y * 0.3 - 3375);
                                    }
                                    else
                                    {
                                        if(Y>60000||Y<=80000)
                                        {
                                            tax = (decimal)(Y * 0.35 - 6375);
                                        }
                                        else
                                        {
                                            if(Y>80000||Y<=100000)
                                            {
                                                tax = (decimal)(Y * 0.4 - 10375);
                                            }
                                            else
                                            {
                                                if(Y>100000)
                                                {
                                                    tax = (decimal)(Y * 0.45 - 15375);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return tax;                                 //方法返回个人所得税
        }
    }
}
